Fix various leaks introduced in the non-NEW_STRING case when refactoring
authorrobertlipe <robertlipe@gmail.com>
Wed, 23 Oct 2013 18:40:27 +0000 (18:40 +0000)
committerrobertlipe <robertlipe@gmail.com>
Wed, 23 Oct 2013 18:40:27 +0000 (18:40 +0000)
surrounding code to be more Qt-ish.

gpsbabel/compegps.cc
gpsbabel/csv_util.cc
gpsbabel/garmin_gpi.cc
gpsbabel/humminbird.cc
gpsbabel/maggeo.cc
gpsbabel/pcx.cc
gpsbabel/stmsdf.cc
gpsbabel/tiger.cc
gpsbabel/tpg.cc

index 43a59c49e18913c371255a3ad9119fe619b0f126..90b90dabe263d03622d9210bb1315d555db3bb3b 100644 (file)
@@ -490,8 +490,8 @@ write_waypt_cb(const waypoint* wpt)
   if (curr_index != target_index) {
     return;
   }
-
-  name = (snlen > 0) ? mkshort_from_wpt(sh, wpt) : csv_stringclean(wpt->shortname, " ");
+// NEW_STRING: remove extra ctor below.
+  name = (snlen > 0) ? mkshort_from_wpt(sh, wpt) : csv_stringclean(QString(wpt->shortname), " ");
 
   gbfprintf(fout, "W  %s A ", CSTR(name));
   gbfprintf(fout, "%.10f%c%c ",
@@ -594,7 +594,8 @@ write_trkpt_cb(const waypoint* wpt)
   if (track_info_flag != 0) {
     track_info_flag = 0;
     if (curr_track->rte_name != NULL) {
-      QString name = csv_stringclean(curr_track->rte_name, "|");
+// NEW_STRING: remove extra ctor below.
+      QString name = csv_stringclean(QString(curr_track->rte_name), "|");
       gbfprintf(fout, "t 4294967295|%s|-1|-1\n", CSTR(name));
     }
   }
index dd76398f098aa44ae38c62fba2a1ceb77744e04b..a766aa5ae37b0d47501f0dd50f7cb2ec55f2befa 100644 (file)
@@ -215,7 +215,10 @@ csv_stringclean(const char* string, const char* chararray)
 QString
 csv_stringclean(const QString& string, const char* chararray)
 {
-  return csv_stringclean(CSTR(string), chararray);
+  char *t = csv_stringclean(CSTR(string), chararray);
+  QString r(t);
+  xfree(t);
+  return r;
 }
 
 char*
index 1b873f3734314d006f670b9a96fb7b089a3b7a77..c44cd6aabdf93d64f4fcfe0c6b2670b632b1227a 100644 (file)
@@ -1310,14 +1310,13 @@ enum_waypt_cb(const waypoint* ref)
 
   wpt = waypt_dupe(ref);
 
-  QString str;
   if (*opt_unique == '1') {
-    str = mkshort(short_h, wpt->shortname);
 #if NEW_STRINGS
-    wpt->shortname = str;
+    wpt->shortname = mkshort(short_h, wpt->shortname);
 #else
+    char* str = mkshort(short_h, wpt->shortname);
     xfree(wpt->shortname);
-    wpt->shortname = xstrdup(str);
+    wpt->shortname = str;
 #endif
   }
 
index bfbdba4a70808372512f3d3ed5a3a99ac88ff7e9..51d2776d366a831a4d9c63195c96249c0b92faa1 100644 (file)
@@ -725,9 +725,10 @@ humminbird_write_waypoint(const waypoint* wpt)
   be_write32(&hum.north, si_round(north));
 
   QString name;
+// NEW_STRING - remove extra ctor below.
   name = (global_opts.synthesize_shortnames)
          ? mkshort_from_wpt(wptname_sh, wpt)
-         : mkshort(wptname_sh, wpt->shortname);
+         : mkshort(wptname_sh, QString(wpt->shortname));
   memset(&hum.name, 0, sizeof(hum.name));
   memcpy(&hum.name, CSTR(name), name.length());
 
@@ -754,7 +755,8 @@ humminbird_track_head(const route_head* trk)
     trk_head = (humminbird_trk_header_t*) xcalloc(1, sizeof(humminbird_trk_header_t));
     trk_points = (humminbird_trk_point_t*) xcalloc(max_points, sizeof(humminbird_trk_point_t));
 
-    name = mkshort(trkname_sh, trk->rte_name);
+// NEW_STRING: remove speare ctor below.
+    name = mkshort(trkname_sh, QString(trk->rte_name));
     strncpy(trk_head->name, CSTR(name), sizeof(trk_head->name));
     be_write16(&trk_head->trk_num, trk->rte_num);
   }
index e59460c3e3751b18b0fa85055b77a174b966fcc0..2db30f65895e6627e57eac8b8cfcbcb305f89b8e 100644 (file)
@@ -274,7 +274,7 @@ maggeo_waypt_pr(const waypoint* waypointp)
 #if NEW_STRINGS
                   waypointp->notes.isEmpty() ? waypointp->description : waypointp->notes);
 #else
-                  waypointp->notes ? waypointp->notes : waypointp->description);
+                  QString(waypointp->notes ? waypointp->notes : waypointp->description));
 #endif
   placer = waypointp->gc_data->placer;
 
index e938ac17ec10975f06cdba6a2b575647255e78a6..c847ff4587a6892c859d9c2af3df3ceda5d76540 100644 (file)
@@ -364,8 +364,8 @@ pcx_track_hdr(const route_head* trk)
 
   route_ctr++;
   snprintf(buff, sizeof(buff)-1, "Trk%03d", route_ctr);
-
-  QString name = mkshort(mkshort_handle2, (trk->rte_name != NULL) ? trk->rte_name : buff);
+// NEW_STRINGS - remove extr ctor below.
+  QString name = mkshort(mkshort_handle2, (trk->rte_name != NULL) ? QString(trk->rte_name) : buff);
   /* Carto Exploreur (popular in France) chokes on trackname headers,
    * so provide option to supppress these.
    */
index eb05bbf2b356a240976df899a69c0308e0441348..fbebe01a39ff25525fc8a6c0d2902d5addaaae55 100644 (file)
@@ -130,10 +130,10 @@ parse_header(char* line)
         is_fatal((ver != 1),
                  MYNAME ": This version '%d' is not yet supported. Please report!", ver);
       } else if (case_ignore_strcmp(key, "NAME") == 0) {
-        rte_name = xstrdup(str);
+        rte_name = str;
       } else if (case_ignore_strcmp(key, "NOTES") == 0) /* ToDo */;
       else if (case_ignore_strcmp(key, "SOURCE") == 0) {
-        rte_desc = xstrdup(str);
+        rte_desc = str;
       } else if (case_ignore_strcmp(key, "TYPE") == 0) {
         filetype = atoi(str);
         switch (filetype) {
@@ -658,7 +658,8 @@ route_disp_wpt_cb(const waypoint* wpt)
     if (global_opts.synthesize_shortnames) {
       sn = mkshort_from_wpt(short_h, wpt);
     } else {
-      sn = mkshort(short_h, wpt->shortname);
+// NEW_STRINGS: eliminate extra ctor below.
+      sn = mkshort(short_h, QString(wpt->shortname));
     }
     gbfprintf(fout, "\"WP\",\"%s\",%.8lf,%.8lf,%.f\n",
               CSTR(sn), wpt->latitude, wpt->longitude, ALT(wpt));
index 1d67f3269ee0ba0ed1f1d7b66af4144d4c534b1c..8a64ff64746eb79facbe3c03545f2b760cc86c6b 100644 (file)
@@ -213,7 +213,8 @@ tiger_disp(const waypoint* wpt)
   gbfprintf(file_out, "%f,%f:%s", lon, lat, pin.toUtf8().data());
   if (!nolabels) {
     QString temp;
-    QString desc = csv_stringclean(wpt->description, ":");
+// NEW_STRINGS - eliminate extr ctor below.
+    QString desc = csv_stringclean(QString(wpt->description), ":");
     if (global_opts.synthesize_shortnames) {
       temp = desc;
       desc = mkshort(mkshort_whandle, desc);
index 576e2fab5c6b60b777dbb3fe5caf6f3eb9db72a4..8d8c4d0ff1016b42eefa76988b76020d000ff111 100644 (file)
@@ -207,7 +207,7 @@ tpg_waypt_pr(const waypoint* wpt)
       shortname = xstrdup("");
     }
   } else {
-    shortname = xstrdup(wpt->shortname);
+    shortname = wpt->shortname;
   }
 #if NEW_STRINGS
   if (wpt->description.isEmpty()) {
@@ -215,12 +215,12 @@ tpg_waypt_pr(const waypoint* wpt)
   if (! wpt->description) {
 #endif
     if (!shortname.isEmpty()) {
-      description = xstrdup(shortname);
+      description = shortname;
     } else {
-      description = xstrdup("");
+      description = "";
     }
   } else {
-    description = xstrdup(wpt->description);
+    description = wpt->description;
   }
 
   /* convert lat/long to NAD27/CONUS datum */